package com.tus.store;

import com.tus.model.UploadInfo;

import java.util.List;
import java.util.Map;

public interface MetadataStore {

    /**
     * 保存新上传任务
     */
    void saveUpload(UploadInfo info);

    /**
     * 根据 uploadId 查询
     */
    UploadInfo findByUploadId(String uploadId);

    /**
     * 更新偏移量（串行模式）
     */
    void updateOffset(String uploadId, long offset);

    /**
     * 更新分片列表和偏移映射（并发模式）
     */
    void updateChunks(String uploadId, List<String> chunks, Map<String, Long> offsets);

    /**
     * 标记上传完成
     */
    void markAsCompleted(String uploadId, String finalPath);

    /**
     * 标记上传完成
     */
    void markAsCompleted(String uploadId);

    /**
     * 标记校验通过
     */
    void markAsVerified(String uploadId);

    /**
     * 删除上传记录（清理时调用）
     */
    void deleteUpload(String uploadId);

    /**
     * 查询所有已过期的上传任务
     *
     * @param now 当前时间戳（毫秒）
     * @return 过期的 UploadInfo 列表
     */
    List<UploadInfo> findExpired(long now);
}
